package com.zuihai.app.mvp.contract;

import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import com.zuihai.app.mvp.model.entity.BaseJson;
import com.zuihai.app.mvp.model.entity.Detail;
import com.zuihai.app.mvp.model.entity.MessageResponse;
import com.zuihai.app.mvp.model.entity.mainhome.KPLogoBean;
import com.zuihai.app.mvp.ui.adapter.DetailLabelAdapter;

import rx.Observable;

/**
 * Created by Administrator on 2017/5/12 0012.
 */

public interface DetailContract {
    //对于经常使用的关于UI的方法可以定义到BaseView中,如显示隐藏进度条,和显示文字消息
    interface View extends IView {
        /**
         * 内容空的时候
         */
        void showEmpty(String content);
        /**
         * 界面错误处理
         * @param e
         */
        void showError(Throwable e);

        /**
         * 填充内容
         * @param detail
         */
        void fillContent(Detail detail);

        /**
         * 填充广告
         * @param url
         */
        void fillAd(String url);

        /**
         * 绑定标签列表
         * @param adapter
         */
        void bindLabelRecycler(DetailLabelAdapter adapter);

        /**
         * 刷新评论数量
         * @param count
         */
        void refreshCommentCount(int count);

        void visibleFramelayout();

        void scrollComment();
        /**
         * 显示分享信息
         */
        void showShareMessage(String message);

        void showFocusMessage(String collectMessage);

        void showCollectMessage(String collectMessage);

        void showDeleteMessage(String deleteMessage);

        void showFavourMessage(String data);//点赞信息

        void showReplyMessage(String data);

        void showReplyIntentMessage(String data);

        void intentMessage(Detail.Comment data);

        void showReplyLoading();

        void hideReplyLoading();

        void adContent(KPLogoBean bean);

        void firstComment(boolean isFirst);

        void finishLoadComment();

        void haveComment(Detail.Comment mdata, int position);

        /**
         * 显示错误信息
         */
        void showErrorMessage(String message);

        /**
         * 解决滑动一次请求多次更多评论问题
         */
        void allowLoadComment();

        void showToast(String msg);

        void intentTuijian();

        void judgeEmptyView();
    }

    //Model层定义接口,外部只需关心model返回的数据,无需关心内部细节,及是否使用缓存
    interface Model extends IModel {

        /**
         * 删除评论
         * @return
         */
        Observable<MessageResponse> deleteComment(String id);
        /**
         * 视频详情
         * @return
         */
        Observable<BaseJson<Detail>> requestVideo(String id, String userId);
        /**
         * 今日头条详情
         * @return
         */
        Observable<BaseJson<Detail>> requestHeadline(String id, String userId);
        /**
         * 热点详情
         * @return
         */
        Observable<BaseJson<Detail>> requestHot(String id, String userId);

        /**
         * 人物详情
         * @return
         */
        Observable<BaseJson<Detail>> requestCharacter(String id, String userId);
        /**
         * 故事详情
         * @return
         */
        Observable<BaseJson<Detail>> requestStory(String id, String userId);
        /**
         * 互助详情
         * @return
         */
        Observable<BaseJson<Detail>> requestHelp(String id, String userId);
        /**
         * 逛街详情
         * @return
         */
        Observable<BaseJson<Detail>> requestShopping(String id, String userId);
        /**
         * 周边详情
         * @return
         */
        Observable<BaseJson<Detail>> requestPeryphery(String id, String userId);
        /**
         * 活动详情
         * @return
         */
        Observable<BaseJson<Detail>> requestActivity(String id, String userId);
        /**
         * 酒城日记详情
         * @param id
         * @param userId
         * @return
         */
        Observable<BaseJson<Detail>> requestDiary(String id, String userId);

        /**
         * 发现秘密详情
         * @param id
         * @param userId
         * @return
         */
        Observable<BaseJson<Detail>> requestSecret(String id, String userId);

        /**
         * 获取评论列表
         * @param id
         * @param page
         * @param userId
         * @return
         */
        Observable<BaseJson<Detail.Comment>> requestAddComment(String id, int page, String userId);

        /**
         * 商品/服务详情
         * @return
         */
        Observable<BaseJson<Detail>> requestCommodity(String id, int commodityType, String userId);

        /**
         * 好货详情
         * @return
         */
        Observable<BaseJson<Detail>> requestGoodGoods(String id, String userId);

        /**
         * 服务详情
         * @return
         */
        Observable<BaseJson<Detail>> requestService(String id, String userId);


        /**
         * 店铺详情
         * @return
         */
        Observable<BaseJson<Detail>> requestShop(String id, String userId);

        /**
         * 关注用户
         * @param id
         * @param userId
         * @param isCare
         * @return
         */
        Observable<MessageResponse> requestCare(String id, String userId, int isCare);

        /**
         * 评论点赞
         * @param id
         * @param userId
         * @param isFavour
         * @return
         */
        Observable<MessageResponse> commentFavour(String id, String userId, int isFavour, String releaserId,String type);

        /**
         * 头条文章点赞
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> handlineFavour(String id, String userId, String releaserId,String cancel,String type);

        /**
         * 发现秘密点赞
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> secretFavour(String id, String userId, String releaserId,String cancel,String type);

        /**
         * 有去处点赞
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> shopFavour(String id, String userId, String releaserId);

        /**
         * 服务点赞
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> serverFavour(String id, String userId, String releaserId);

        /**
         * 商品点赞
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> commodityFavour(String id, String userId, String releaserId);

        /**
         * 添加评论
         * @param id
         * @param userId
         * @param comment
         * @return
         */
        Observable<BaseJson<Detail.Comment>> requestAddComment(String id, String userId, String comment,String release_id,String picture,String type);

        /**
         * 收藏头条
         * @param id
         * @param userId
         * @param isCollect
         * @return
         */
        Observable<MessageResponse> headlineCollect(
                String id, String userId,String type, boolean isCollect,String releaser_id);

        /**
         * 收藏发现秘密
         * @param id
         * @param userId
         * @param isCollect
         * @return
         */
        Observable<MessageResponse> secretCollect(String id, String userId, boolean isCollect);

        /**
         * 收藏店铺（有去处）
         * @param id
         * @param userId
         * @param isCollect
         * @return
         */
        Observable<MessageResponse> shopCollect(String id, String userId, boolean isCollect);

        /**
         * 收藏物品
         * @param id
         * @param userId
         * @param isCollect
         * @return
         */
        Observable<MessageResponse> commodityCollect(String id, String userId, boolean isCollect);

        /**
         * 收藏服务
         * @param id
         * @param userId
         * @param isCollect
         * @return
         */
        Observable<MessageResponse> serverCollect(String id, String userId, boolean isCollect);

        /**
         * 头条举报
         * @param id
         * @param userId
         * @param inform
         * @return
         */
        Observable<MessageResponse> headlineInform(String id, String userId, String inform);

        /**
         * 发现秘密举报
         * @param id
         * @param userId
         * @param inform
         * @return
         */
        Observable<MessageResponse> secretInform(String id, String userId, String inform);

        /**
         * 有去处举报
         * @param id
         * @param userId
         * @param inform
         * @return
         */
        Observable<MessageResponse> shopInform(String id, String userId, String inform);

        /**
         * 商品/服务举报
         * @param id
         * @param userId
         * @param inform
         * @return
         */
        Observable<MessageResponse> commodityInform(String id, String userId, String inform);

        /**
         * 分享红包
         * @param id
         * @param userId
         * @param type
         * @return
         */
        Observable<MessageResponse> shareLuckyMoney(String id, String userId, String type);


        /**
         * 点赞红包通用
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> requestFavourLuckyMoney(String id, String userId);


        /**
         * 分享红包通用
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> requestShareLuckyMoney(String id, String userId);
        /**
         * 今日头条/酒城日记点赞红包
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> headlineAndDiaryFavourLuckyMoney(String id, String userId);

        /**
         * 发现秘密点赞红包
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> secretFavourLuckyMoney(String id, String userId);

        /**
         * 有去处点赞红包
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> shopFavourLuckyMoney(String id, String userId);

        /**
         * 逛街点赞红包
         * @param id
         * @param userId
         * @return
         */
        Observable<MessageResponse> commodityFavourLuckyMoney(String id, String userId);


        /**
         * 新接口举报
         * @param id
         * @param userId
         * @param inform
         * @return
         */
        Observable<MessageResponse> requestInform(String id, String userId, String inform,String type);


        /**
         * 回复评论
         * @param id
         * @param userId
         * @param content
         * @return
         */
        Observable<BaseJson<Detail.ReplyComment>> replyComment(String releaserId,
                                                               String id,
                                                               String userId,
                                                               String content,
                                                               String beihuifu,
                                                               String picture);
        /**
         * 是否有评论
         * @param id
         * @return
         */
        Observable<MessageResponse> haveComment(String id);

    }
}